package 前缀系列;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/2/28 19:22
 */
public class leetcode2574左右元素的差值 {

    /*
      前缀和 ：
      主要 考察 一手 对前缀和 的 理解
      preSum[i] =  [0 , i)   这个区间的区间和, 左闭右开
     */


    public int [] solution(int nums[]){
        int len = nums.length,sum = 0;
        int[] ans =  new int[len];
        int preSum[] = new int[len + 1];
        for(int i = 0;i < len;i++){
            sum += nums[i];
            preSum[i + 1] = preSum[i] + nums[i];
        }
        for(int i = 0;i < len; i++){
            ans[i] = Math.abs(sum - nums[i] - preSum[i] * 2);
        }
        return ans;
    }

    /*
     空间优化的 一个写法, 这个思想还是听巧妙的
     */
    public int[] leftRigthDifference(int[] nums) {
        int left = 0;
        int right = 0;
        for (int num : nums) {
            right += num;
        }

        int[] res = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            right = right - nums[i];
            res[i] = Math.abs(left - right);
            left = left + nums[i];
        }
        return res;
    }


}
